package cn.tedu.net.collection.basic;
/**本类用于测试基本类型的字面值规则
 */
public class Dome {
    //0.创建入口函数main()--main--Alt+/补全代码
    public static void main(String[] args) {
        /*1.整数类型的字面值类型是int类型*/
        int a= 99999;

        //int b = 999999999999;错,右面的数据台打了,超出int的范围21.47亿
        long l = 999999999999L;//给数据添加一个L后缀,表示是Long类型

        /**2.浮点数的字面值类型是double类型*/
        double r =3.14;//对,右面数据的字面值就是double类型

        //float r2 = 3.14;错,不能把double给float
        float r3 = 3.14F;//给数据添加一个F后缀,表示是float类型

        /**3.byte short char 三种 比int小的类型可以使用范围内的值直接赋值*/
        byte b1=127;
        //byte b2 = 128; 错,超出了byte的范围

        /**4.字面值后缀L F D */
        long x = 99999999999L;
        float b = 3.0F;
        double d = 3D;

        /**小到大,直接转(隐式转换)*/
        byte m =120;
        int n=m;//小转大,float->double

        //大到小,强制转(显示转换)
        int z = 128;
        byte b3 = (byte) z;
        System.out.println(b3);//-128

        //浮变整,小数没
        float f2 =33.5F;
        int i = (int) f2;
        System.out.println(i);
        /**运算规则
         * 1.计算结果的数据类型,与最大类型一致
         */
        System.out.println(3/2);//1 int/int,得到的结果还是int类型
        System.out.println(3/2d);//1.5  int/double的到的结果是double
        System.out.println(3/2.0);//1.5 int/double的到的结果是double
        System.out.println(3/2f);//1.5  int/float的到的结果是float
        /**2.byete short char 三种比int小的整数,运算时先转换成int再进行计算
         * a2+b2会自动提升成int类型,右边的运算结果就是int大类型
         * 给左边的byte小类型赋值,不可以,需要强制类型转换
         * */
        byte a2=1;
        byte b2=127;
        byte c2=(byte) (a2+b2);
        System.out.println(c2);
        /**3.整数运算溢出
         * 溢出的现象:
         * 因为做了大的整数数据的运算,超出了int的范围
         * 解决办法:把整数int类型提升成long类型
         * */
        //需求:计算光运行一年的长度是多少米? 3亿m/s
        System.out.println(300000000L*60*60*24*365);

        /**4.浮点数运算不精确
         这是一个现象,用小数类解决
         */
        System.out.println(1-0.8);

        /**5.浮点数的特殊值*/
        System.out.println(3.14/0);// Infinity--无穷大
        System.out.println(0/0.0);//NaN-Not a Number
        System.out.println(0.0/0);//NaN-Not a Number


    }
}
